const express = require('express')

const next = require('next')
const dev = process.env.NODE_ENV !== 'production'
const port = 3000
const nextApp = next({ dev })
const handle = nextApp.getRequestHandler()
const bodyParser = require("body-parser")

// 创建Redis连接配置
const session = require('express-session')
const redis = require('redis')
const RedisStore = require('connect-redis')(session)
const redisClient = redis.createClient(6379, '127.0.0.1')

const index = require('./routers/index')

nextApp
.prepare()
.then(() => {
  const app = express()

  // redis 连接
  app.use(session({
    // store session存储实例，默认为一个新的 MemoryStore 实例。
    store: new RedisStore({ client: redisClient }), //只需设置这个就可存储到redis
    name: 'session.id', //默认connect.sid
    secret: 'han-sess', //设置签名秘钥  内容可以任意填写
    resave: false, // 强制保存，如果session没有被修改也要重新保存,默认true(推荐false)
    saveUninitialized: true, //如果原先没有session那么就设置，否则不设置(推荐true)
    /* 设置cookie的过期时间，sessiion的过期时间会随cookie自动更改,
    也可以只设置session过期时间,cookie也跟着更改(两者只能选1个，效果一样)*/
    cookie: { // 全局设置cookie,就是访问随便api就会设置cookie，也可以在登录的路由下单独设置
        maxAge: 1000 * 30 * 60, //过期时间(毫秒)30分钟失效
        httpOnly: true // 是否允许客户端修改cookie,(默认true 不能被修改)
            // secure: true //https这样的情况才可以访问cookie,默认false(推荐)
    },
    // rolling: true //在每次请求时强行设置 cookie，这将重置 cookie 过期时间(默认：false推荐false)
  }))



  // post 的 body 才能获取到参数
  app.use(bodyParser.urlencoded({ extended: false }))

  app.use('/api', index)

  // 页面路由
  app.get('*', (req, res) => {
    return handle(req, res)
  })

  app.listen(port, err => {
    if (err) throw err
    console.log(`> Ready on http://localhost:${port}`)
  })
})
.catch(ex => {
  console.error(ex.stack)
  process.exit(1)
})